Exercise 4

In [1]:
# Import libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt
from math import sqrt
from numba import jit

np.seterr(divide='ignore', invalid='ignore')
Out[1]:
{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}

Noise deduction

In [2]:
# Load dataset

christ = cv2.imread('images/christ/christ.jpg', 0)
noise0 = cv2.imread('images/christ/noise0.jpg', 0)
noise1 = cv2.imread('images/christ/noise1.jpg', 0)
noise2 = cv2.imread('images/christ/noise2.jpg', 0)
noise3 = cv2.imread('images/christ/noise3.jpg', 0)
noise4 = cv2.imread('images/christ/noise4.jpg', 0)
noise5 = cv2.imread('images/christ/noise5.jpg', 0)
noise6 = cv2.imread('images/christ/noise6.jpg', 0)

Original image

In [3]:
plt.figure(figsize=(15,5))
ax1 = plt.subplot(121)
ax1.imshow(christ, cmap='gray')
ax2 = plt.subplot(122)
ax2.hist(christ.flatten(), bins=255)

ax1.axis('off')

ax1.text(0.5,-0.1, "Christ", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Hist", ha="center", transform=ax2.transAxes)
Out[3]:
Text(0.5, -0.1, 'Hist')

Noise 0 - (Uniform)

In [4]:
plt.figure(figsize=(15,5))
ax1 = plt.subplot(121)
ax1.imshow(noise0, cmap='gray')
ax2 = plt.subplot(122)
ax2.hist(noise0.flatten(), bins=255)

ax1.axis('off')

ax1.text(0.5,-0.1, "Noise 0", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Hist", ha="center", transform=ax2.transAxes)
Out[4]:
Text(0.5, -0.1, 'Hist')

Noise 1 - (Salt and Pepper)

In [5]:
plt.figure(figsize=(15,5))
ax1 = plt.subplot(121)
ax1.imshow(noise1, cmap='gray')
ax2 = plt.subplot(122)
ax2.hist(noise1.flatten(), bins=255)

ax1.axis('off')

ax1.text(0.5,-0.1, "Noise 1", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Hist", ha="center", transform=ax2.transAxes)
Out[5]:
Text(0.5, -0.1, 'Hist')

Noise 2 - (Rayleigh)

In [6]:
plt.figure(figsize=(15,5))
ax1 = plt.subplot(121)
ax1.imshow(noise2, cmap='gray')
ax2 = plt.subplot(122)
ax2.hist(noise2.flatten(), bins=255)

ax1.axis('off')

ax1.text(0.5,-0.1, "Noise 2", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Hist", ha="center", transform=ax2.transAxes)
Out[6]:
Text(0.5, -0.1, 'Hist')

Noise 3 - (Salt)¶

In [7]:
plt.figure(figsize=(15,5))
ax1 = plt.subplot(121)
ax1.imshow(noise3, cmap='gray')
ax2 = plt.subplot(122)
ax2.hist(noise3.flatten(), bins=255)

ax1.axis('off')

ax1.text(0.5,-0.1, "Noise 3", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Hist", ha="center", transform=ax2.transAxes)
Out[7]:
Text(0.5, -0.1, 'Hist')

Noise 4 - (Salt and Pepper)¶

In [8]:
plt.figure(figsize=(15,5))
ax1 = plt.subplot(121)
ax1.imshow(noise4, cmap='gray')
ax2 = plt.subplot(122)
ax2.hist(noise4.flatten(), bins=255)

ax1.axis('off')

ax1.text(0.5,-0.1, "Noise 4", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Hist", ha="center", transform=ax2.transAxes)
Out[8]:
Text(0.5, -0.1, 'Hist')

Noise 5 - (Pepper)¶

In [9]:
plt.figure(figsize=(15,5))
ax1 = plt.subplot(121)
ax1.imshow(noise5, cmap='gray')
ax2 = plt.subplot(122)
ax2.hist(noise5.flatten(), bins=255)

ax1.axis('off')

ax1.text(0.5,-0.1, "Noise 5", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Hist", ha="center", transform=ax2.transAxes)
Out[9]:
Text(0.5, -0.1, 'Hist')

Noise 6 - (Gaussian)¶

In [10]:
plt.figure(figsize=(15,5))
ax1 = plt.subplot(121)
ax1.imshow(noise6, cmap='gray')
ax2 = plt.subplot(122)
ax2.hist(noise6.flatten(), bins=255)

ax1.axis('off')

ax1.text(0.5,-0.1, "Noise 6", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Hist", ha="center", transform=ax2.transAxes)
Out[10]:
Text(0.5, -0.1, 'Hist')

Image correction

In [11]:
# Load dataset

ibirapuera = cv2.imread('images/ibirapuera/ibirapuera.jpg', 0)
ruidoGaussiano = cv2.imread('images/ibirapuera/ruidoGaussiano.jpg', 0)
ruidoGaussianoSalPimenta = cv2.imread('images/ibirapuera/ruidoGaussianoSalPimenta.jpg', 0)
ruidoPimenta = cv2.imread('images/ibirapuera/ruidoPimenta.jpg', 0)
ruidoSal = cv2.imread('images/ibirapuera/ruidoSal.jpg', 0)
ruidoSalPimenta = cv2.imread('images/ibirapuera/ruidoSalPimenta.jpg', 0)

Filters implementation

In [12]:
@jit
def geometric(img, sizew, sizeh):
    kh,kw = sizeh, sizew
    h,w = img.shape    
    rh = kh // 2
    rw = kw // 2
    
    border = cv2.copyMakeBorder(img, rh, rh, rw, rw, cv2.BORDER_DEFAULT)
    result = img.copy()
        
    for row in range(h):
        for col in range(w):
            result[row,col] = np.prod( border[row:row+rh,col:col+rw] ) ** ( 1 / (rw*rh) )
    
    return result.astype('uint8')

@jit
def harmonic(img, sizew, sizeh):
    kh,kw = sizeh, sizew
    h,w = img.shape    
    rh = kh // 2
    rw = kw // 2
    
    border = cv2.copyMakeBorder(img, rh, rh, rw, rw, cv2.BORDER_DEFAULT)
    result = img.copy()
    
    for row in range(h):
        for col in range(w):
            numerator = kw*kh
            denominator = np.sum( 1 / border[row:row+rh,col:col+rw] )
            result[row,col] =  0 if denominator == 0 else numerator / denominator
        
    return result.astype('uint8')

@jit
def counter_harmonic(img, sizew, sizeh, order):
    kh,kw = sizeh, sizew
    h,w = img.shape    
    rh = kh // 2
    rw = kw // 2
    
    border = cv2.copyMakeBorder(img, rh, rh, rw, rw, cv2.BORDER_DEFAULT)
    result = img.copy()
    
    for row in range(h):
        for col in range(w):
            numerator = np.sum( border[row:row+rh,col:col+rw] ** (order + 1) )
            denominator = np.sum( border[row:row+rh,col:col+rw] ** order )
            result[row,col] = 0 if denominator == 0 else numerator / denominator
            
    return result.astype('uint8')

@jit
def max_filter(img, sizew, sizeh):
    kh,kw = sizeh, sizew
    h,w = img.shape    
    rh = kh // 2
    rw = kw // 2
    
    border = cv2.copyMakeBorder(img, rh, rh, rw, rw, cv2.BORDER_DEFAULT)
    result = img.copy()
    
    for row in range(h):
        for col in range(w):
            result[row,col] = border[row:row+rh,col:col+rw].max()
    
    return result.astype('uint8')

@jit
def min_filter(img, sizew, sizeh):
    kh,kw = sizeh, sizew
    h,w = img.shape    
    rh = kh // 2
    rw = kw // 2
    
    border = cv2.copyMakeBorder(img, rh, rh, rw, rw, cv2.BORDER_DEFAULT)
    result = img.copy()
    
    for row in range(h):
        for col in range(w):
            result[row,col] = border[row:row+rh,col:col+rw].min()
    
    return result.astype('uint8')

@jit
def mid_point(img, sizew, sizeh):
    kh,kw = sizeh, sizew
    h,w = img.shape    
    rh = kh // 2
    rw = kw // 2
    
    border = cv2.copyMakeBorder(img, rh, rh, rw, rw, cv2.BORDER_DEFAULT)
    result = img.copy()
    
    for row in range(h):
        for col in range(w):
            result[row,col] = (border[row:row+rh,col:col+rw].min() + border[row:row+rh,col:col+rw].max()) / 2
            
    return result.astype('uint8')

@jit
def alpha_cut(img, sizew, sizeh, d):
    kh,kw = sizeh, sizew
    h,w = img.shape    
    rh = kh // 2
    rw = kw // 2
    
    border = cv2.copyMakeBorder(img, rh, rh, rw, rw, cv2.BORDER_DEFAULT)
    result = img.copy()
    
    for row in range(h):
        for col in range(w):            
            flatten = border[row:row+rh,col:col+rw].flatten()
            flatten.sort()            
            result[row,col] = 1 / ( kw*kh-d ) * sum( flatten[d//2:-(d//2)] )
    
    return result.astype('uint8')

@jit
def rmse(img1, img2):
    h,w = img1.shape
    result = img1.astype('float') - img2.astype('float')
    result = result ** 2
    
    summation = np.sum(result) / (w*h)
    return sqrt(summation)

Gaussian noise

In [13]:
blur3 = cv2.blur(ruidoGaussiano, (3,3))
blur5 = cv2.blur(ruidoGaussiano, (5,5))
blur7 = cv2.blur(ruidoGaussiano, (7,7))
blur9 = cv2.blur(ruidoGaussiano, (9,9))

geometric3 = geometric(ruidoGaussiano, 3,3)
geometric5 = geometric(ruidoGaussiano, 5,5)
geometric7 = geometric(ruidoGaussiano, 7,7)
geometric9 = geometric(ruidoGaussiano, 9,9)

harmonic3 = harmonic(ruidoGaussiano, 3,3)
harmonic5 = harmonic(ruidoGaussiano, 5,5)
harmonic7 = harmonic(ruidoGaussiano, 7,7)
harmonic9 = harmonic(ruidoGaussiano, 9,9)

counter_harmonic33 = counter_harmonic(ruidoGaussiano, 3,3,3)
counter_harmonic35 = counter_harmonic(ruidoGaussiano, 3,3,5)
counter_harmonic37 = counter_harmonic(ruidoGaussiano, 3,3,7)
counter_harmonic53 = counter_harmonic(ruidoGaussiano, 5,5,3)
counter_harmonic55 = counter_harmonic(ruidoGaussiano, 5,5,5)
counter_harmonic57 = counter_harmonic(ruidoGaussiano, 5,5,7)
counter_harmonic73 = counter_harmonic(ruidoGaussiano, 7,7,3)
counter_harmonic75 = counter_harmonic(ruidoGaussiano, 7,7,5)
counter_harmonic77 = counter_harmonic(ruidoGaussiano, 7,7,7)
counter_harmonic93 = counter_harmonic(ruidoGaussiano, 9,9,3)
counter_harmonic95 = counter_harmonic(ruidoGaussiano, 9,9,5)
counter_harmonic97 = counter_harmonic(ruidoGaussiano, 9,9,7)

median3 = cv2.medianBlur(ruidoGaussiano, 3)
median5 = cv2.medianBlur(ruidoGaussiano, 5)
median7 = cv2.medianBlur(ruidoGaussiano, 7)
median9 = cv2.medianBlur(ruidoGaussiano, 9)

max3 = max_filter(ruidoGaussiano, 3,3)
max5 = max_filter(ruidoGaussiano, 5,5)
max7 = max_filter(ruidoGaussiano, 7,7)
max9 = max_filter(ruidoGaussiano, 9,9)

min3 = min_filter(ruidoGaussiano, 3,3)
min5 = min_filter(ruidoGaussiano, 5,5)
min7 = min_filter(ruidoGaussiano, 7,7)
min9 = min_filter(ruidoGaussiano, 9,9)

mid_point3 = mid_point(ruidoGaussiano, 3,3)
mid_point5 = mid_point(ruidoGaussiano, 5,5)
mid_point7 = mid_point(ruidoGaussiano, 7,7)
mid_point9 = mid_point(ruidoGaussiano, 9,9)

alpha_cut31 = alpha_cut(ruidoGaussiano, 3,3,1)
alpha_cut32 = alpha_cut(ruidoGaussiano, 3,3,2)
alpha_cut33 = alpha_cut(ruidoGaussiano, 3,3,3)
alpha_cut51 = alpha_cut(ruidoGaussiano, 5,5,1)
alpha_cut52 = alpha_cut(ruidoGaussiano, 5,5,2)
alpha_cut53 = alpha_cut(ruidoGaussiano, 5,5,3)
alpha_cut71 = alpha_cut(ruidoGaussiano, 7,7,1)
alpha_cut72 = alpha_cut(ruidoGaussiano, 7,7,2)
alpha_cut73 = alpha_cut(ruidoGaussiano, 7,7,3)
alpha_cut91 = alpha_cut(ruidoGaussiano, 9,9,1)
alpha_cut92 = alpha_cut(ruidoGaussiano, 9,9,2)
alpha_cut93 = alpha_cut(ruidoGaussiano, 9,9,3)
In [14]:
print("blur3:", rmse(blur3, ibirapuera))
print("blur5:", rmse(blur5, ibirapuera))
print("blur7:", rmse(blur7, ibirapuera))
print("blur9:", rmse(blur9, ibirapuera))
print("geometric3:", rmse(geometric3, ibirapuera))
print("geometric5:", rmse(geometric5, ibirapuera))
print("geometric7:", rmse(geometric7, ibirapuera))
print("geometric9:", rmse(geometric9, ibirapuera))
print("harmonic3:", rmse(harmonic3, ibirapuera))
print("harmonic5:", rmse(harmonic5, ibirapuera))
print("harmonic7:", rmse(harmonic7, ibirapuera))
print("harmonic9:", rmse(harmonic9, ibirapuera))
print("counter_harmonic33:", rmse(counter_harmonic33, ibirapuera))
print("counter_harmonic35:", rmse(counter_harmonic35, ibirapuera))
print("counter_harmonic37:", rmse(counter_harmonic37, ibirapuera))
print("counter_harmonic53:", rmse(counter_harmonic53, ibirapuera))
print("counter_harmonic55:", rmse(counter_harmonic55, ibirapuera))
print("counter_harmonic57:", rmse(counter_harmonic57, ibirapuera))
print("counter_harmonic73:", rmse(counter_harmonic73, ibirapuera))
print("counter_harmonic75:", rmse(counter_harmonic75, ibirapuera))
print("counter_harmonic77:", rmse(counter_harmonic77, ibirapuera))
print("counter_harmonic93:", rmse(counter_harmonic93, ibirapuera))
print("counter_harmonic95:", rmse(counter_harmonic95, ibirapuera))
print("counter_harmonic97:", rmse(counter_harmonic97, ibirapuera))
print("median3:", rmse(median3, ibirapuera))
print("median5:", rmse(median5, ibirapuera))
print("median7:", rmse(median7, ibirapuera))
print("median9:", rmse(median9, ibirapuera))
print("max3:", rmse(max3, ibirapuera))
print("max5:", rmse(max5, ibirapuera))
print("max7:", rmse(max7, ibirapuera))
print("max9:", rmse(max9, ibirapuera))
print("min3:", rmse(min3, ibirapuera))
print("min5:", rmse(min5, ibirapuera))
print("min7:", rmse(min7, ibirapuera))
print("min9:", rmse(min9, ibirapuera))
print("mid_point3:", rmse(mid_point3, ibirapuera))
print("mid_point5:", rmse(mid_point5, ibirapuera))
print("mid_point7:", rmse(mid_point7, ibirapuera))
print("mid_point9:", rmse(mid_point9, ibirapuera))
print("alpha_cut31:", rmse(alpha_cut31, ibirapuera))
print("alpha_cut32:", rmse(alpha_cut32, ibirapuera))
print("alpha_cut33:", rmse(alpha_cut33, ibirapuera))
print("alpha_cut51:", rmse(alpha_cut51, ibirapuera))
print("alpha_cut52:", rmse(alpha_cut52, ibirapuera))
print("alpha_cut53:", rmse(alpha_cut53, ibirapuera))
print("alpha_cut71:", rmse(alpha_cut71, ibirapuera))
print("alpha_cut72:", rmse(alpha_cut72, ibirapuera))
print("alpha_cut73:", rmse(alpha_cut73, ibirapuera))
print("alpha_cut91:", rmse(alpha_cut91, ibirapuera))
print("alpha_cut92:", rmse(alpha_cut92, ibirapuera))
print("alpha_cut93:", rmse(alpha_cut93, ibirapuera))
blur3: 15.29242310093623
blur5: 19.446575688916923
blur7: 21.365760970196817
blur9: 22.7748214590695
geometric3: 28.532664005644637
geometric5: 28.481469077271093
geometric7: 51.05733867233046
geometric9: 127.6112576169147
harmonic3: 92.60466489696634
harmonic5: 106.08098795955488
harmonic7: 87.49223741575172
harmonic9: 106.73822137636587
counter_harmonic33: 28.532664005644637
counter_harmonic35: 28.532664005644637
counter_harmonic37: 29.313860083892365
counter_harmonic53: 29.469573774228305
counter_harmonic55: 30.709273145311716
counter_harmonic57: 56.73530223343769
counter_harmonic73: 31.439460808766203
counter_harmonic75: 33.909778094144826
counter_harmonic77: 64.9673247089823
counter_harmonic93: 33.38641894779459
counter_harmonic95: 36.82465725494868
counter_harmonic97: 78.13580428294183
median3: 15.046018779684498
median5: 18.996987003277724
median7: 20.898356017950384
median9: 22.3273643823619
max3: 28.532664005644637
max5: 34.152350741730594
max7: 41.13749088650993
max9: 47.19341487400514
min3: 28.532664005644637
min5: 33.64681378093413
min7: 39.51890848342691
min9: 44.41569072398558
mid_point3: 28.532664005644637
mid_point5: 27.942153343375573
mid_point7: 28.002210060985355
mid_point9: 28.760327047525568
alpha_cut31: 140.52431328710458
alpha_cut32: 140.52431328710458
alpha_cut33: 140.52431328710458
alpha_cut51: 140.52431328710458
alpha_cut52: 129.08539185039652
alpha_cut53: 128.5515882215065
alpha_cut71: 140.52431328710458
alpha_cut72: 120.72496849458284
alpha_cut73: 120.28714863947567
alpha_cut91: 140.52431328710458
alpha_cut92: 116.96403921746125
alpha_cut93: 116.66352458164275

Best result (Median filter 3x3)

In [15]:
plt.figure(figsize=(15,15))
ax1 = plt.subplot(311)
ax1.imshow(ibirapuera, cmap='gray')
ax2 = plt.subplot(312)
ax2.imshow(ruidoGaussiano, cmap='gray')
ax3 = plt.subplot(313)
ax3.imshow(median3, cmap='gray')

ax1.axis('off')
ax2.axis('off')
ax3.axis('off')

ax1.text(0.5,-0.1, "Ibirapuera", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Gaussian noise", ha="center", transform=ax2.transAxes)
ax3.text(0.5,-0.1, "Median filter 3x3", ha="center", transform=ax3.transAxes)
Out[15]:
Text(0.5, -0.1, 'Median filter 3x3')

Gaussian noise with salt and pepper noise

In [16]:
blur3 = cv2.blur(ruidoGaussianoSalPimenta, (3,3))
blur5 = cv2.blur(ruidoGaussianoSalPimenta, (5,5))
blur7 = cv2.blur(ruidoGaussianoSalPimenta, (7,7))
blur9 = cv2.blur(ruidoGaussianoSalPimenta, (9,9))

geometric3 = geometric(ruidoGaussianoSalPimenta, 3,3)
geometric5 = geometric(ruidoGaussianoSalPimenta, 5,5)
geometric7 = geometric(ruidoGaussianoSalPimenta, 7,7)
geometric9 = geometric(ruidoGaussianoSalPimenta, 9,9)

harmonic3 = harmonic(ruidoGaussianoSalPimenta, 3,3)
harmonic5 = harmonic(ruidoGaussianoSalPimenta, 5,5)
harmonic7 = harmonic(ruidoGaussianoSalPimenta, 7,7)
harmonic9 = harmonic(ruidoGaussianoSalPimenta, 9,9)

counter_harmonic33 = counter_harmonic(ruidoGaussianoSalPimenta, 3,3,3)
counter_harmonic35 = counter_harmonic(ruidoGaussianoSalPimenta, 3,3,5)
counter_harmonic37 = counter_harmonic(ruidoGaussianoSalPimenta, 3,3,7)
counter_harmonic53 = counter_harmonic(ruidoGaussianoSalPimenta, 5,5,3)
counter_harmonic55 = counter_harmonic(ruidoGaussianoSalPimenta, 5,5,5)
counter_harmonic57 = counter_harmonic(ruidoGaussianoSalPimenta, 5,5,7)
counter_harmonic73 = counter_harmonic(ruidoGaussianoSalPimenta, 7,7,3)
counter_harmonic75 = counter_harmonic(ruidoGaussianoSalPimenta, 7,7,5)
counter_harmonic77 = counter_harmonic(ruidoGaussianoSalPimenta, 7,7,7)
counter_harmonic93 = counter_harmonic(ruidoGaussianoSalPimenta, 9,9,3)
counter_harmonic95 = counter_harmonic(ruidoGaussianoSalPimenta, 9,9,5)
counter_harmonic97 = counter_harmonic(ruidoGaussianoSalPimenta, 9,9,7)

median3 = cv2.medianBlur(ruidoGaussianoSalPimenta, 3)
median5 = cv2.medianBlur(ruidoGaussianoSalPimenta, 5)
median7 = cv2.medianBlur(ruidoGaussianoSalPimenta, 7)
median9 = cv2.medianBlur(ruidoGaussianoSalPimenta, 9)

max3 = max_filter(ruidoGaussianoSalPimenta, 3,3)
max5 = max_filter(ruidoGaussianoSalPimenta, 5,5)
max7 = max_filter(ruidoGaussianoSalPimenta, 7,7)
max9 = max_filter(ruidoGaussianoSalPimenta, 9,9)

min3 = min_filter(ruidoGaussianoSalPimenta, 3,3)
min5 = min_filter(ruidoGaussianoSalPimenta, 5,5)
min7 = min_filter(ruidoGaussianoSalPimenta, 7,7)
min9 = min_filter(ruidoGaussianoSalPimenta, 9,9)

mid_point3 = mid_point(ruidoGaussianoSalPimenta, 3,3)
mid_point5 = mid_point(ruidoGaussianoSalPimenta, 5,5)
mid_point7 = mid_point(ruidoGaussianoSalPimenta, 7,7)
mid_point9 = mid_point(ruidoGaussianoSalPimenta, 9,9)

alpha_cut31 = alpha_cut(ruidoGaussianoSalPimenta, 3,3,1)
alpha_cut32 = alpha_cut(ruidoGaussianoSalPimenta, 3,3,2)
alpha_cut33 = alpha_cut(ruidoGaussianoSalPimenta, 3,3,3)
alpha_cut51 = alpha_cut(ruidoGaussianoSalPimenta, 5,5,1)
alpha_cut52 = alpha_cut(ruidoGaussianoSalPimenta, 5,5,2)
alpha_cut53 = alpha_cut(ruidoGaussianoSalPimenta, 5,5,3)
alpha_cut71 = alpha_cut(ruidoGaussianoSalPimenta, 7,7,1)
alpha_cut72 = alpha_cut(ruidoGaussianoSalPimenta, 7,7,2)
alpha_cut73 = alpha_cut(ruidoGaussianoSalPimenta, 7,7,3)
alpha_cut91 = alpha_cut(ruidoGaussianoSalPimenta, 9,9,1)
alpha_cut92 = alpha_cut(ruidoGaussianoSalPimenta, 9,9,2)
alpha_cut93 = alpha_cut(ruidoGaussianoSalPimenta, 9,9,3)
In [17]:
print("blur3:", rmse(blur3, ibirapuera))
print("blur5:", rmse(blur5, ibirapuera))
print("blur7:", rmse(blur7, ibirapuera))
print("blur9:", rmse(blur9, ibirapuera))
print("geometric3:", rmse(geometric3, ibirapuera))
print("geometric5:", rmse(geometric5, ibirapuera))
print("geometric7:", rmse(geometric7, ibirapuera))
print("geometric9:", rmse(geometric9, ibirapuera))
print("harmonic3:", rmse(harmonic3, ibirapuera))
print("harmonic5:", rmse(harmonic5, ibirapuera))
print("harmonic7:", rmse(harmonic7, ibirapuera))
print("harmonic9:", rmse(harmonic9, ibirapuera))
print("counter_harmonic33:", rmse(counter_harmonic33, ibirapuera))
print("counter_harmonic35:", rmse(counter_harmonic35, ibirapuera))
print("counter_harmonic37:", rmse(counter_harmonic37, ibirapuera))
print("counter_harmonic53:", rmse(counter_harmonic53, ibirapuera))
print("counter_harmonic55:", rmse(counter_harmonic55, ibirapuera))
print("counter_harmonic57:", rmse(counter_harmonic57, ibirapuera))
print("counter_harmonic73:", rmse(counter_harmonic73, ibirapuera))
print("counter_harmonic75:", rmse(counter_harmonic75, ibirapuera))
print("counter_harmonic77:", rmse(counter_harmonic77, ibirapuera))
print("counter_harmonic93:", rmse(counter_harmonic93, ibirapuera))
print("counter_harmonic95:", rmse(counter_harmonic95, ibirapuera))
print("counter_harmonic97:", rmse(counter_harmonic97, ibirapuera))
print("median3:", rmse(median3, ibirapuera))
print("median5:", rmse(median5, ibirapuera))
print("median7:", rmse(median7, ibirapuera))
print("median9:", rmse(median9, ibirapuera))
print("max3:", rmse(max3, ibirapuera))
print("max5:", rmse(max5, ibirapuera))
print("max7:", rmse(max7, ibirapuera))
print("max9:", rmse(max9, ibirapuera))
print("min3:", rmse(min3, ibirapuera))
print("min5:", rmse(min5, ibirapuera))
print("min7:", rmse(min7, ibirapuera))
print("min9:", rmse(min9, ibirapuera))
print("mid_point3:", rmse(mid_point3, ibirapuera))
print("mid_point5:", rmse(mid_point5, ibirapuera))
print("mid_point7:", rmse(mid_point7, ibirapuera))
print("mid_point9:", rmse(mid_point9, ibirapuera))
print("alpha_cut31:", rmse(alpha_cut31, ibirapuera))
print("alpha_cut32:", rmse(alpha_cut32, ibirapuera))
print("alpha_cut33:", rmse(alpha_cut33, ibirapuera))
print("alpha_cut51:", rmse(alpha_cut51, ibirapuera))
print("alpha_cut52:", rmse(alpha_cut52, ibirapuera))
print("alpha_cut53:", rmse(alpha_cut53, ibirapuera))
print("alpha_cut71:", rmse(alpha_cut71, ibirapuera))
print("alpha_cut72:", rmse(alpha_cut72, ibirapuera))
print("alpha_cut73:", rmse(alpha_cut73, ibirapuera))
print("alpha_cut91:", rmse(alpha_cut91, ibirapuera))
print("alpha_cut92:", rmse(alpha_cut92, ibirapuera))
print("alpha_cut93:", rmse(alpha_cut93, ibirapuera))
blur3: 27.804378727912535
blur5: 25.626948536111794
blur7: 25.772725556319248
blur9: 26.411719152605272
geometric3: 66.21938701461674
geometric5: 79.95860673680659
geometric7: 102.95648055207073
geometric9: 136.17609907633258
harmonic3: 101.36548522256926
harmonic5: 112.2190800470852
harmonic7: 113.83934996275977
harmonic9: 125.74954667558096
counter_harmonic33: 66.21938701461674
counter_harmonic35: 66.21938701461674
counter_harmonic37: 64.57162539183324
counter_harmonic53: 73.68006704940899
counter_harmonic55: 78.94975833835994
counter_harmonic57: 92.57517853121503
counter_harmonic73: 87.971436683219
counter_harmonic75: 100.02868647054841
counter_harmonic77: 120.64932679202096
counter_harmonic93: 95.22225255310619
counter_harmonic95: 112.54006404144238
counter_harmonic97: 134.01898604837277
median3: 17.89982388464622
median5: 19.694530240561626
median7: 21.283457916734147
median9: 22.612326909581103
max3: 66.21938701461674
max5: 82.99334678427063
max7: 108.87085682859114
max9: 125.37352702660795
min3: 66.21938701461674
min5: 86.83563298590224
min7: 112.65058242596179
min9: 128.20944638907616
mid_point3: 66.21938701461674
mid_point5: 53.97919830771566
mid_point7: 58.94748855709154
mid_point9: 59.8012393065361
alpha_cut31: 140.52431328710458
alpha_cut32: 140.52431328710458
alpha_cut33: 140.52431328710458
alpha_cut51: 140.52431328710458
alpha_cut52: 129.2612723867402
alpha_cut53: 128.7364325448584
alpha_cut71: 140.52431328710458
alpha_cut72: 121.13429386413438
alpha_cut73: 120.70309788003719
alpha_cut91: 140.52431328710458
alpha_cut92: 117.57633487171479
alpha_cut93: 117.27927029326953

Best result (Median filter 3x3)

In [18]:
plt.figure(figsize=(15,15))
ax1 = plt.subplot(311)
ax1.imshow(ibirapuera, cmap='gray')
ax2 = plt.subplot(312)
ax2.imshow(ruidoGaussianoSalPimenta, cmap='gray')
ax3 = plt.subplot(313)
ax3.imshow(median3, cmap='gray')

ax1.axis('off')
ax2.axis('off')
ax3.axis('off')

ax1.text(0.5,-0.1, "Ibirapuera", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Gaussian noise with salt and pepper noise", ha="center", transform=ax2.transAxes)
ax3.text(0.5,-0.1, "Median filter 3x3", ha="center", transform=ax3.transAxes)
Out[18]:
Text(0.5, -0.1, 'Median filter 3x3')

Pepper noise

In [19]:
blur3 = cv2.blur(ruidoPimenta, (3,3))
blur5 = cv2.blur(ruidoPimenta, (5,5))
blur7 = cv2.blur(ruidoPimenta, (7,7))
blur9 = cv2.blur(ruidoPimenta, (9,9))

geometric3 = geometric(ruidoPimenta, 3,3)
geometric5 = geometric(ruidoPimenta, 5,5)
geometric7 = geometric(ruidoPimenta, 7,7)
geometric9 = geometric(ruidoPimenta, 9,9)

harmonic3 = harmonic(ruidoPimenta, 3,3)
harmonic5 = harmonic(ruidoPimenta, 5,5)
harmonic7 = harmonic(ruidoPimenta, 7,7)
harmonic9 = harmonic(ruidoPimenta, 9,9)

counter_harmonic33 = counter_harmonic(ruidoPimenta, 3,3,3)
counter_harmonic35 = counter_harmonic(ruidoPimenta, 3,3,5)
counter_harmonic37 = counter_harmonic(ruidoPimenta, 3,3,7)
counter_harmonic53 = counter_harmonic(ruidoPimenta, 5,5,3)
counter_harmonic55 = counter_harmonic(ruidoPimenta, 5,5,5)
counter_harmonic57 = counter_harmonic(ruidoPimenta, 5,5,7)
counter_harmonic73 = counter_harmonic(ruidoPimenta, 7,7,3)
counter_harmonic75 = counter_harmonic(ruidoPimenta, 7,7,5)
counter_harmonic77 = counter_harmonic(ruidoPimenta, 7,7,7)
counter_harmonic93 = counter_harmonic(ruidoPimenta, 9,9,3)
counter_harmonic95 = counter_harmonic(ruidoPimenta, 9,9,5)
counter_harmonic97 = counter_harmonic(ruidoPimenta, 9,9,7)

median3 = cv2.medianBlur(ruidoPimenta, 3)
median5 = cv2.medianBlur(ruidoPimenta, 5)
median7 = cv2.medianBlur(ruidoPimenta, 7)
median9 = cv2.medianBlur(ruidoPimenta, 9)

max3 = max_filter(ruidoPimenta, 3,3)
max5 = max_filter(ruidoPimenta, 5,5)
max7 = max_filter(ruidoPimenta, 7,7)
max9 = max_filter(ruidoPimenta, 9,9)

min3 = min_filter(ruidoPimenta, 3,3)
min5 = min_filter(ruidoPimenta, 5,5)
min7 = min_filter(ruidoPimenta, 7,7)
min9 = min_filter(ruidoPimenta, 9,9)

mid_point3 = mid_point(ruidoPimenta, 3,3)
mid_point5 = mid_point(ruidoPimenta, 5,5)
mid_point7 = mid_point(ruidoPimenta, 7,7)
mid_point9 = mid_point(ruidoPimenta, 9,9)

alpha_cut31 = alpha_cut(ruidoPimenta, 3,3,1)
alpha_cut32 = alpha_cut(ruidoPimenta, 3,3,2)
alpha_cut33 = alpha_cut(ruidoPimenta, 3,3,3)
alpha_cut51 = alpha_cut(ruidoPimenta, 5,5,1)
alpha_cut52 = alpha_cut(ruidoPimenta, 5,5,2)
alpha_cut53 = alpha_cut(ruidoPimenta, 5,5,3)
alpha_cut71 = alpha_cut(ruidoPimenta, 7,7,1)
alpha_cut72 = alpha_cut(ruidoPimenta, 7,7,2)
alpha_cut73 = alpha_cut(ruidoPimenta, 7,7,3)
alpha_cut91 = alpha_cut(ruidoPimenta, 9,9,1)
alpha_cut92 = alpha_cut(ruidoPimenta, 9,9,2)
alpha_cut93 = alpha_cut(ruidoPimenta, 9,9,3)
In [20]:
print("blur3:", rmse(blur3, ibirapuera))
print("blur5:", rmse(blur5, ibirapuera))
print("blur7:", rmse(blur7, ibirapuera))
print("blur9:", rmse(blur9, ibirapuera))
print("geometric3:", rmse(geometric3, ibirapuera))
print("geometric5:", rmse(geometric5, ibirapuera))
print("geometric7:", rmse(geometric7, ibirapuera))
print("geometric9:", rmse(geometric9, ibirapuera))
print("harmonic3:", rmse(harmonic3, ibirapuera))
print("harmonic5:", rmse(harmonic5, ibirapuera))
print("harmonic7:", rmse(harmonic7, ibirapuera))
print("harmonic9:", rmse(harmonic9, ibirapuera))
print("counter_harmonic33:", rmse(counter_harmonic33, ibirapuera))
print("counter_harmonic35:", rmse(counter_harmonic35, ibirapuera))
print("counter_harmonic37:", rmse(counter_harmonic37, ibirapuera))
print("counter_harmonic53:", rmse(counter_harmonic53, ibirapuera))
print("counter_harmonic55:", rmse(counter_harmonic55, ibirapuera))
print("counter_harmonic57:", rmse(counter_harmonic57, ibirapuera))
print("counter_harmonic73:", rmse(counter_harmonic73, ibirapuera))
print("counter_harmonic75:", rmse(counter_harmonic75, ibirapuera))
print("counter_harmonic77:", rmse(counter_harmonic77, ibirapuera))
print("counter_harmonic93:", rmse(counter_harmonic93, ibirapuera))
print("counter_harmonic95:", rmse(counter_harmonic95, ibirapuera))
print("counter_harmonic97:", rmse(counter_harmonic97, ibirapuera))
print("median3:", rmse(median3, ibirapuera))
print("median5:", rmse(median5, ibirapuera))
print("median7:", rmse(median7, ibirapuera))
print("median9:", rmse(median9, ibirapuera))
print("max3:", rmse(max3, ibirapuera))
print("max5:", rmse(max5, ibirapuera))
print("max7:", rmse(max7, ibirapuera))
print("max9:", rmse(max9, ibirapuera))
print("min3:", rmse(min3, ibirapuera))
print("min5:", rmse(min5, ibirapuera))
print("min7:", rmse(min7, ibirapuera))
print("min9:", rmse(min9, ibirapuera))
print("mid_point3:", rmse(mid_point3, ibirapuera))
print("mid_point5:", rmse(mid_point5, ibirapuera))
print("mid_point7:", rmse(mid_point7, ibirapuera))
print("mid_point9:", rmse(mid_point9, ibirapuera))
print("alpha_cut31:", rmse(alpha_cut31, ibirapuera))
print("alpha_cut32:", rmse(alpha_cut32, ibirapuera))
print("alpha_cut33:", rmse(alpha_cut33, ibirapuera))
print("alpha_cut51:", rmse(alpha_cut51, ibirapuera))
print("alpha_cut52:", rmse(alpha_cut52, ibirapuera))
print("alpha_cut53:", rmse(alpha_cut53, ibirapuera))
print("alpha_cut71:", rmse(alpha_cut71, ibirapuera))
print("alpha_cut72:", rmse(alpha_cut72, ibirapuera))
print("alpha_cut73:", rmse(alpha_cut73, ibirapuera))
print("alpha_cut91:", rmse(alpha_cut91, ibirapuera))
print("alpha_cut92:", rmse(alpha_cut92, ibirapuera))
print("alpha_cut93:", rmse(alpha_cut93, ibirapuera))
blur3: 49.4913342791567
blur5: 47.81914417318346
blur7: 47.74256150986532
blur9: 47.999203053866495
geometric3: 80.14510149437422
geometric5: 116.1298247663483
geometric7: 132.82071657148617
geometric9: 140.11849446146073
harmonic3: 106.53510791415562
harmonic5: 127.40838958254385
harmonic7: 134.69688038236444
harmonic9: 139.27792871580502
counter_harmonic33: 80.14510149437422
counter_harmonic35: 80.14510149437422
counter_harmonic37: 80.34369117145917
counter_harmonic53: 32.41576148311235
counter_harmonic55: 33.198891288551174
counter_harmonic57: 50.21265434099723
counter_harmonic73: 31.554822714190994
counter_harmonic75: 33.61975877914456
counter_harmonic77: 67.59649674005139
counter_harmonic93: 33.42060457633506
counter_harmonic95: 36.48775855671657
counter_harmonic97: 74.04451271038772
median3: 48.22822635434602
median5: 31.94858461550267
median7: 28.410258088226506
median9: 29.03502681246826
max3: 80.14510149437422
max5: 35.239377672409866
max7: 39.173889051601414
max9: 45.03204903318999
min3: 80.14510149437422
min5: 123.12780625146091
min7: 137.62828192130283
min9: 140.24642933847616
mid_point3: 80.14510149437422
mid_point5: 63.53166794762441
mid_point7: 65.89915564208194
mid_point9: 65.46004963170502
alpha_cut31: 140.52431328710458
alpha_cut32: 140.52431328710458
alpha_cut33: 140.52431328710458
alpha_cut51: 140.52431328710458
alpha_cut52: 131.84955691538667
alpha_cut53: 131.453629316831
alpha_cut71: 140.52431328710458
alpha_cut72: 126.02111627011053
alpha_cut73: 125.69763460521182
alpha_cut91: 140.52431328710458
alpha_cut92: 123.64293397520538
alpha_cut93: 123.42288930711928

Best result (Median Filter 7x7)

In [21]:
plt.figure(figsize=(15,15))
ax1 = plt.subplot(311)
ax1.imshow(ibirapuera, cmap='gray')
ax2 = plt.subplot(312)
ax2.imshow(ruidoPimenta, cmap='gray')
ax3 = plt.subplot(313)
ax3.imshow(median7, cmap='gray')

ax1.axis('off')
ax2.axis('off')
ax3.axis('off')

ax1.text(0.5,-0.1, "Ibirapuera", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Pepper noise", ha="center", transform=ax2.transAxes)
ax3.text(0.5,-0.1, "Median filter 7x7", ha="center", transform=ax3.transAxes)
Out[21]:
Text(0.5, -0.1, 'Median filter 7x7')

Salt noise

In [22]:
blur3 = cv2.blur(ruidoSal, (3,3))
blur5 = cv2.blur(ruidoSal, (5,5))
blur7 = cv2.blur(ruidoSal, (7,7))
blur9 = cv2.blur(ruidoSal, (9,9))

geometric3 = geometric(ruidoSal, 3,3)
geometric5 = geometric(ruidoSal, 5,5)
geometric7 = geometric(ruidoSal, 7,7)
geometric9 = geometric(ruidoSal, 9,9)

harmonic3 = harmonic(ruidoSal, 3,3)
harmonic5 = harmonic(ruidoSal, 5,5)
harmonic7 = harmonic(ruidoSal, 7,7)
harmonic9 = harmonic(ruidoSal, 9,9)

counter_harmonic33 = counter_harmonic(ruidoSal, 3,3,3)
counter_harmonic35 = counter_harmonic(ruidoSal, 3,3,5)
counter_harmonic37 = counter_harmonic(ruidoSal, 3,3,7)
counter_harmonic53 = counter_harmonic(ruidoSal, 5,5,3)
counter_harmonic55 = counter_harmonic(ruidoSal, 5,5,5)
counter_harmonic57 = counter_harmonic(ruidoSal, 5,5,7)
counter_harmonic73 = counter_harmonic(ruidoSal, 7,7,3)
counter_harmonic75 = counter_harmonic(ruidoSal, 7,7,5)
counter_harmonic77 = counter_harmonic(ruidoSal, 7,7,7)
counter_harmonic93 = counter_harmonic(ruidoSal, 9,9,3)
counter_harmonic95 = counter_harmonic(ruidoSal, 9,9,5)
counter_harmonic97 = counter_harmonic(ruidoSal, 9,9,7)

median3 = cv2.medianBlur(ruidoSal, 3)
median5 = cv2.medianBlur(ruidoSal, 5)
median7 = cv2.medianBlur(ruidoSal, 7)
median9 = cv2.medianBlur(ruidoSal, 9)

max3 = max_filter(ruidoSal, 3,3)
max5 = max_filter(ruidoSal, 5,5)
max7 = max_filter(ruidoSal, 7,7)
max9 = max_filter(ruidoSal, 9,9)

min3 = min_filter(ruidoSal, 3,3)
min5 = min_filter(ruidoSal, 5,5)
min7 = min_filter(ruidoSal, 7,7)
min9 = min_filter(ruidoSal, 9,9)

mid_point3 = mid_point(ruidoSal, 3,3)
mid_point5 = mid_point(ruidoSal, 5,5)
mid_point7 = mid_point(ruidoSal, 7,7)
mid_point9 = mid_point(ruidoSal, 9,9)

alpha_cut31 = alpha_cut(ruidoSal, 3,3,1)
alpha_cut32 = alpha_cut(ruidoSal, 3,3,2)
alpha_cut33 = alpha_cut(ruidoSal, 3,3,3)
alpha_cut51 = alpha_cut(ruidoSal, 5,5,1)
alpha_cut52 = alpha_cut(ruidoSal, 5,5,2)
alpha_cut53 = alpha_cut(ruidoSal, 5,5,3)
alpha_cut71 = alpha_cut(ruidoSal, 7,7,1)
alpha_cut72 = alpha_cut(ruidoSal, 7,7,2)
alpha_cut73 = alpha_cut(ruidoSal, 7,7,3)
alpha_cut91 = alpha_cut(ruidoSal, 9,9,1)
alpha_cut92 = alpha_cut(ruidoSal, 9,9,2)
alpha_cut93 = alpha_cut(ruidoSal, 9,9,3)
In [23]:
print("blur3:", rmse(blur3, ibirapuera))
print("blur5:", rmse(blur5, ibirapuera))
print("blur7:", rmse(blur7, ibirapuera))
print("blur9:", rmse(blur9, ibirapuera))
print("geometric3:", rmse(geometric3, ibirapuera))
print("geometric5:", rmse(geometric5, ibirapuera))
print("geometric7:", rmse(geometric7, ibirapuera))
print("geometric9:", rmse(geometric9, ibirapuera))
print("harmonic3:", rmse(harmonic3, ibirapuera))
print("harmonic5:", rmse(harmonic5, ibirapuera))
print("harmonic7:", rmse(harmonic7, ibirapuera))
print("harmonic9:", rmse(harmonic9, ibirapuera))
print("counter_harmonic33:", rmse(counter_harmonic33, ibirapuera))
print("counter_harmonic35:", rmse(counter_harmonic35, ibirapuera))
print("counter_harmonic37:", rmse(counter_harmonic37, ibirapuera))
print("counter_harmonic53:", rmse(counter_harmonic53, ibirapuera))
print("counter_harmonic55:", rmse(counter_harmonic55, ibirapuera))
print("counter_harmonic57:", rmse(counter_harmonic57, ibirapuera))
print("counter_harmonic73:", rmse(counter_harmonic73, ibirapuera))
print("counter_harmonic75:", rmse(counter_harmonic75, ibirapuera))
print("counter_harmonic77:", rmse(counter_harmonic77, ibirapuera))
print("counter_harmonic93:", rmse(counter_harmonic93, ibirapuera))
print("counter_harmonic95:", rmse(counter_harmonic95, ibirapuera))
print("counter_harmonic97:", rmse(counter_harmonic97, ibirapuera))
print("median3:", rmse(median3, ibirapuera))
print("median5:", rmse(median5, ibirapuera))
print("median7:", rmse(median7, ibirapuera))
print("median9:", rmse(median9, ibirapuera))
print("max3:", rmse(max3, ibirapuera))
print("max5:", rmse(max5, ibirapuera))
print("max7:", rmse(max7, ibirapuera))
print("max9:", rmse(max9, ibirapuera))
print("min3:", rmse(min3, ibirapuera))
print("min5:", rmse(min5, ibirapuera))
print("min7:", rmse(min7, ibirapuera))
print("min9:", rmse(min9, ibirapuera))
print("mid_point3:", rmse(mid_point3, ibirapuera))
print("mid_point5:", rmse(mid_point5, ibirapuera))
print("mid_point7:", rmse(mid_point7, ibirapuera))
print("mid_point9:", rmse(mid_point9, ibirapuera))
print("alpha_cut31:", rmse(alpha_cut31, ibirapuera))
print("alpha_cut32:", rmse(alpha_cut32, ibirapuera))
print("alpha_cut33:", rmse(alpha_cut33, ibirapuera))
print("alpha_cut51:", rmse(alpha_cut51, ibirapuera))
print("alpha_cut52:", rmse(alpha_cut52, ibirapuera))
print("alpha_cut53:", rmse(alpha_cut53, ibirapuera))
print("alpha_cut71:", rmse(alpha_cut71, ibirapuera))
print("alpha_cut72:", rmse(alpha_cut72, ibirapuera))
print("alpha_cut73:", rmse(alpha_cut73, ibirapuera))
print("alpha_cut91:", rmse(alpha_cut91, ibirapuera))
print("alpha_cut92:", rmse(alpha_cut92, ibirapuera))
print("alpha_cut93:", rmse(alpha_cut93, ibirapuera))
blur3: 49.44746718088152
blur5: 47.81004235670734
blur7: 47.74038944780801
blur9: 48.01419229645158
geometric3: 80.09291001813251
geometric5: 47.64720138213313
geometric7: 54.0929165073628
geometric9: 127.58362298316254
harmonic3: 103.88520081054591
harmonic5: 93.42357495893692
harmonic7: 86.51224601243668
harmonic9: 91.91727509691795
counter_harmonic33: 80.09291001813251
counter_harmonic35: 80.09291001813251
counter_harmonic37: 74.73929899575508
counter_harmonic53: 111.47124669447665
counter_harmonic55: 118.33538192340745
counter_harmonic57: 130.66152116365515
counter_harmonic73: 120.34007258835508
counter_harmonic75: 130.48139769170578
counter_harmonic77: 147.73986740736757
counter_harmonic93: 122.34120273994614
counter_harmonic95: 132.7824653020324
counter_harmonic97: 150.04367011641813
median3: 47.96077723870664
median5: 31.433992395321965
median7: 27.87870528101414
median9: 28.456259198880023
max3: 80.09291001813251
max5: 123.21453930496041
max7: 137.72026153345445
max9: 140.28973912818662
min3: 80.09291001813251
min5: 34.50933585928522
min7: 37.3475181624448
min9: 42.07817694861636
mid_point3: 80.09291001813251
mid_point5: 62.62805760504337
mid_point7: 63.94046559850384
mid_point9: 62.84017662255736
alpha_cut31: 140.52431328710458
alpha_cut32: 140.52431328710458
alpha_cut33: 140.52431328710458
alpha_cut51: 140.52431328710458
alpha_cut52: 127.10390724762404
alpha_cut53: 126.4853572502514
alpha_cut71: 140.52431328710458
alpha_cut72: 117.02422073464557
alpha_cut73: 116.50994539174623
alpha_cut91: 140.52431328710458
alpha_cut92: 112.2863713776784
alpha_cut93: 111.92496261966615

Best result (Median Filter 7x7)

In [24]:
plt.figure(figsize=(15,15))
ax1 = plt.subplot(311)
ax1.imshow(ibirapuera, cmap='gray')
ax2 = plt.subplot(312)
ax2.imshow(ruidoSal, cmap='gray')
ax3 = plt.subplot(313)
ax3.imshow(median7, cmap='gray')

ax1.axis('off')
ax2.axis('off')
ax3.axis('off')

ax1.text(0.5,-0.1, "Ibirapuera", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Salt noise", ha="center", transform=ax2.transAxes)
ax3.text(0.5,-0.1, "Median filter 7x7", ha="center", transform=ax3.transAxes)
Out[24]:
Text(0.5, -0.1, 'Median filter 7x7')

Salt and pepper noise

In [25]:
blur3 = cv2.blur(ruidoSalPimenta, (3,3))
blur5 = cv2.blur(ruidoSalPimenta, (5,5))
blur7 = cv2.blur(ruidoSalPimenta, (7,7))
blur9 = cv2.blur(ruidoSalPimenta, (9,9))

geometric3 = geometric(ruidoSalPimenta, 3,3)
geometric5 = geometric(ruidoSalPimenta, 5,5)
geometric7 = geometric(ruidoSalPimenta, 7,7)
geometric9 = geometric(ruidoSalPimenta, 9,9)

harmonic3 = harmonic(ruidoSalPimenta, 3,3)
harmonic5 = harmonic(ruidoSalPimenta, 5,5)
harmonic7 = harmonic(ruidoSalPimenta, 7,7)
harmonic9 = harmonic(ruidoSalPimenta, 9,9)

counter_harmonic33 = counter_harmonic(ruidoSalPimenta, 3,3,3)
counter_harmonic35 = counter_harmonic(ruidoSalPimenta, 3,3,5)
counter_harmonic37 = counter_harmonic(ruidoSalPimenta, 3,3,7)
counter_harmonic53 = counter_harmonic(ruidoSalPimenta, 5,5,3)
counter_harmonic55 = counter_harmonic(ruidoSalPimenta, 5,5,5)
counter_harmonic57 = counter_harmonic(ruidoSalPimenta, 5,5,7)
counter_harmonic73 = counter_harmonic(ruidoSalPimenta, 7,7,3)
counter_harmonic75 = counter_harmonic(ruidoSalPimenta, 7,7,5)
counter_harmonic77 = counter_harmonic(ruidoSalPimenta, 7,7,7)
counter_harmonic93 = counter_harmonic(ruidoSalPimenta, 9,9,3)
counter_harmonic95 = counter_harmonic(ruidoSalPimenta, 9,9,5)
counter_harmonic97 = counter_harmonic(ruidoSalPimenta, 9,9,7)

median3 = cv2.medianBlur(ruidoSalPimenta, 3)
median5 = cv2.medianBlur(ruidoSalPimenta, 5)
median7 = cv2.medianBlur(ruidoSalPimenta, 7)
median9 = cv2.medianBlur(ruidoSalPimenta, 9)

max3 = max_filter(ruidoSalPimenta, 3,3)
max5 = max_filter(ruidoSalPimenta, 5,5)
max7 = max_filter(ruidoSalPimenta, 7,7)
max9 = max_filter(ruidoSalPimenta, 9,9)

min3 = min_filter(ruidoSalPimenta, 3,3)
min5 = min_filter(ruidoSalPimenta, 5,5)
min7 = min_filter(ruidoSalPimenta, 7,7)
min9 = min_filter(ruidoSalPimenta, 9,9)

mid_point3 = mid_point(ruidoSalPimenta, 3,3)
mid_point5 = mid_point(ruidoSalPimenta, 5,5)
mid_point7 = mid_point(ruidoSalPimenta, 7,7)
mid_point9 = mid_point(ruidoSalPimenta, 9,9)

alpha_cut31 = alpha_cut(ruidoSalPimenta, 3,3,1)
alpha_cut32 = alpha_cut(ruidoSalPimenta, 3,3,2)
alpha_cut33 = alpha_cut(ruidoSalPimenta, 3,3,3)
alpha_cut51 = alpha_cut(ruidoSalPimenta, 5,5,1)
alpha_cut52 = alpha_cut(ruidoSalPimenta, 5,5,2)
alpha_cut53 = alpha_cut(ruidoSalPimenta, 5,5,3)
alpha_cut71 = alpha_cut(ruidoSalPimenta, 7,7,1)
alpha_cut72 = alpha_cut(ruidoSalPimenta, 7,7,2)
alpha_cut73 = alpha_cut(ruidoSalPimenta, 7,7,3)
alpha_cut91 = alpha_cut(ruidoSalPimenta, 9,9,1)
alpha_cut92 = alpha_cut(ruidoSalPimenta, 9,9,2)
alpha_cut93 = alpha_cut(ruidoSalPimenta, 9,9,3)
In [26]:
print("blur3:", rmse(blur3, ibirapuera))
print("blur5:", rmse(blur5, ibirapuera))
print("blur7:", rmse(blur7, ibirapuera))
print("blur9:", rmse(blur9, ibirapuera))
print("geometric3:", rmse(geometric3, ibirapuera))
print("geometric5:", rmse(geometric5, ibirapuera))
print("geometric7:", rmse(geometric7, ibirapuera))
print("geometric9:", rmse(geometric9, ibirapuera))
print("harmonic3:", rmse(harmonic3, ibirapuera))
print("harmonic5:", rmse(harmonic5, ibirapuera))
print("harmonic7:", rmse(harmonic7, ibirapuera))
print("harmonic9:", rmse(harmonic9, ibirapuera))
print("counter_harmonic33:", rmse(counter_harmonic33, ibirapuera))
print("counter_harmonic35:", rmse(counter_harmonic35, ibirapuera))
print("counter_harmonic37:", rmse(counter_harmonic37, ibirapuera))
print("counter_harmonic53:", rmse(counter_harmonic53, ibirapuera))
print("counter_harmonic55:", rmse(counter_harmonic55, ibirapuera))
print("counter_harmonic57:", rmse(counter_harmonic57, ibirapuera))
print("counter_harmonic73:", rmse(counter_harmonic73, ibirapuera))
print("counter_harmonic75:", rmse(counter_harmonic75, ibirapuera))
print("counter_harmonic77:", rmse(counter_harmonic77, ibirapuera))
print("counter_harmonic93:", rmse(counter_harmonic93, ibirapuera))
print("counter_harmonic95:", rmse(counter_harmonic95, ibirapuera))
print("counter_harmonic97:", rmse(counter_harmonic97, ibirapuera))
print("median3:", rmse(median3, ibirapuera))
print("median5:", rmse(median5, ibirapuera))
print("median7:", rmse(median7, ibirapuera))
print("median9:", rmse(median9, ibirapuera))
print("max3:", rmse(max3, ibirapuera))
print("max5:", rmse(max5, ibirapuera))
print("max7:", rmse(max7, ibirapuera))
print("max9:", rmse(max9, ibirapuera))
print("min3:", rmse(min3, ibirapuera))
print("min5:", rmse(min5, ibirapuera))
print("min7:", rmse(min7, ibirapuera))
print("min9:", rmse(min9, ibirapuera))
print("mid_point3:", rmse(mid_point3, ibirapuera))
print("mid_point5:", rmse(mid_point5, ibirapuera))
print("mid_point7:", rmse(mid_point7, ibirapuera))
print("mid_point9:", rmse(mid_point9, ibirapuera))
print("alpha_cut31:", rmse(alpha_cut31, ibirapuera))
print("alpha_cut32:", rmse(alpha_cut32, ibirapuera))
print("alpha_cut33:", rmse(alpha_cut33, ibirapuera))
print("alpha_cut51:", rmse(alpha_cut51, ibirapuera))
print("alpha_cut52:", rmse(alpha_cut52, ibirapuera))
print("alpha_cut53:", rmse(alpha_cut53, ibirapuera))
print("alpha_cut71:", rmse(alpha_cut71, ibirapuera))
print("alpha_cut72:", rmse(alpha_cut72, ibirapuera))
print("alpha_cut73:", rmse(alpha_cut73, ibirapuera))
print("alpha_cut91:", rmse(alpha_cut91, ibirapuera))
print("alpha_cut92:", rmse(alpha_cut92, ibirapuera))
print("alpha_cut93:", rmse(alpha_cut93, ibirapuera))
blur3: 27.724246810417682
blur5: 25.532607506428466
blur7: 25.679711835293123
blur9: 26.29663177157923
geometric3: 66.01368426634485
geometric5: 79.44049923988382
geometric7: 102.52017918950052
geometric9: 136.11624211424882
harmonic3: 100.41569612582828
harmonic5: 112.03798838478876
harmonic7: 113.33748412924228
harmonic9: 125.31188257619382
counter_harmonic33: 66.01368426634485
counter_harmonic35: 66.01368426634485
counter_harmonic37: 64.33053298180984
counter_harmonic53: 73.94649237466079
counter_harmonic55: 79.21842791320584
counter_harmonic57: 92.82204146312114
counter_harmonic73: 88.2391933127592
counter_harmonic75: 100.29078189115184
counter_harmonic77: 120.79260843889506
counter_harmonic93: 95.41431264061845
counter_harmonic95: 112.70643356752649
counter_harmonic97: 134.29965139028118
median3: 17.701052888659394
median5: 19.67601618215182
median7: 21.274463594618283
median9: 22.57319176559856
max3: 66.01368426634485
max5: 83.26996202495914
max7: 109.16627331697926
max9: 125.59345305942061
min3: 66.01368426634485
min5: 86.18071474814276
min7: 112.05648633769087
min9: 127.80098766408915
mid_point3: 66.01368426634485
mid_point5: 53.93591169946144
mid_point7: 58.99866865497313
mid_point9: 59.902580211464944
alpha_cut31: 140.52431328710458
alpha_cut32: 140.52431328710458
alpha_cut33: 140.52431328710458
alpha_cut51: 140.52431328710458
alpha_cut52: 129.20269707805926
alpha_cut53: 128.67710052423595
alpha_cut71: 140.52431328710458
alpha_cut72: 121.03802152952096
alpha_cut73: 120.60439052025744
alpha_cut91: 140.52431328710458
alpha_cut92: 117.45665049376287
alpha_cut93: 117.15609715383604

Best result (Median Filter 3x3)

In [27]:
plt.figure(figsize=(15,15))
ax1 = plt.subplot(311)
ax1.imshow(ibirapuera, cmap='gray')
ax2 = plt.subplot(312)
ax2.imshow(ruidoSalPimenta, cmap='gray')
ax3 = plt.subplot(313)
ax3.imshow(median3, cmap='gray')

ax1.axis('off')
ax2.axis('off')
ax3.axis('off')

ax1.text(0.5,-0.1, "Ibirapuera", ha="center", transform=ax1.transAxes)
ax2.text(0.5,-0.1, "Salt and pepper noise", ha="center", transform=ax2.transAxes)
ax3.text(0.5,-0.1, "Median filter 3x3", ha="center", transform=ax3.transAxes)
Out[27]:
Text(0.5, -0.1, 'Median filter 3x3')